<?php

namespace addons\groupon\listener\order;

use addons\groupon\exception\Exception;
use addons\groupon\model\ActivityGoodsSkuPrice;
use addons\groupon\model\Config;
use addons\groupon\model\Goods;
use addons\groupon\model\Order;
use addons\groupon\model\OrderItem;
use addons\groupon\model\GoodsSkuPrice;
use addons\groupon\model\User;
use addons\groupon\model\UserCoupons;

/**
 * 订单发货
 */
class Send
{
    // 订单发货之后行为
    public function GrouponOrderSendAfter(&$params)
    {
        $order = $params['order'];
        $item = $params['item'];

        $order = Order::get($order['id']);      // 重新查询 order 并赋值，因为 params['order'] 是通过 item 关联过来的，里面的  $order['item'] 会取到 父级 item， 而不是一个数组
        $item = OrderItem::get($item['id']);

        // 更新订单备货时间
        $order->ext = json_encode($order->setExt($order, ['ready_time' => time()]));
        $order->save();

        // 添加自动确认收货队列
        $config = Config::where('name', 'order')->cache(300)->find();        // 读取配置自动缓存 5 分钟
        $config = isset($config) ? json_decode($config['value'], true) : [];
        $close_days = (isset($config['order_auto_confirm']) && $config['order_auto_confirm'] > 0) 
                            ? $config['order_auto_confirm'] : 10;       // 单位天 
                
        \think\Queue::later(($close_days * 86400), '\addons\groupon\job\OrderAutoOper@autoConfirm', [
            'order' => $order,
            'item' => $item
        ], 'groupon');
    }



    // 订单发货之后行为
    public function GrouponOrderArriveAfter(&$params)
    {
        $order = $params['order'];
        $express = $params['express'];

        // 更新订单备货时间
        $order->ext = json_encode($order->setExt($order, ['arrive_time' => time()]));
        $order->save();

        // 发送到货通知
        $user = User::where('id', $order['user_id'])->find();
        $user && $user->notify(
            new \addons\groupon\notifications\Order([
                'order' => $order,
                'event' => 'order_arrive'
            ])
        );
    }
}
